package com.leo.common.core.exception;

import com.leo.common.core.enums.ExceptionCodeEnum;
import io.micrometer.core.instrument.util.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.Map;

public class Assert {

	/**
	 * 断言这个 boolean 为 true
	 * <p>
	 * 为 false 则抛出异常
	 * </p>
	 * @param expression boolean 值
	 * @param message 消息
	 */
	public static void isTrue(boolean expression, String message) {
		if (!expression) {
			throw new com.leo.common.core.exception.BadRequestException(ExceptionCodeEnum.BIZ_BAD_REQUEST.getCode(),
					message);
		}
	}

	/**
	 * 断言这个 object 为 null
	 * <p>
	 * 不为 null 则抛异常
	 * </p>
	 * @param object 对象
	 * @param message 消息
	 */
	public static void isNull(Object object, String message, Object... params) {
		isTrue(object == null, message);
	}

	/**
	 * 断言这个 object 不为 null
	 * <p>
	 * 为 null 则抛异常
	 * </p>
	 * @param object 对象
	 * @param message 消息
	 */
	public static void notNull(Object object, String message, Object... params) {
		isTrue(object != null, message);
	}

	/**
	 * 断言这个 value 不为 empty
	 * <p>
	 * 为 empty 则抛异常
	 * </p>
	 * @param value 字符串
	 * @param message 消息
	 */
	public static void notEmpty(String value, String message, Object... params) {
		isTrue(StringUtils.isNotBlank(value), message);
	}

	/**
	 * 断言这个 collection 不为 empty
	 * <p>
	 * 为 empty 则抛异常
	 * </p>
	 * @param collection 集合
	 * @param message 消息
	 */
	public static void notEmpty(Collection<?> collection, String message, Object... params) {
		isTrue(!CollectionUtils.isEmpty(collection), message);
	}

	/**
	 * 断言这个 map 不为 empty
	 * <p>
	 * 为 empty 则抛异常
	 * </p>
	 * @param map 集合
	 * @param message 消息
	 */
	public static void notEmpty(Map<?, ?> map, String message, Object... params) {
		isTrue(!CollectionUtils.isEmpty(map), message);
	}

}
